home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic 4 Database How-To / Visual Basic 4 Database - How-to (The Waite Group)(1995).iso / dde.fr_ / dde.fr
Text File  |  1995-07-05  |  7KB  |  234 lines

  1. VERSION 4.00
  2. Begin VB.Form Form1 
  3.    BackColor       =   &H00C0C0C0&
  4.    Caption         =   "DDE Report Printer"
  5.    ClientHeight    =   2310
  6.    ClientLeft      =   1095
  7.    ClientTop       =   1740
  8.    ClientWidth     =   5955
  9.    Height          =   2715
  10.    Left            =   1035
  11.    LinkTopic       =   "Form1"
  12.    ScaleHeight     =   2310
  13.    ScaleWidth      =   5955
  14.    Top             =   1395
  15.    Width           =   6075
  16.    Begin VB.CommandButton cmdClose 
  17.       Cancel          =   -1  'True
  18.       Caption         =   "&Close"
  19.       BeginProperty Font 
  20.          name            =   "MS Sans Serif"
  21.          charset         =   0
  22.          weight          =   700
  23.          size            =   8.25
  24.          underline       =   0   'False
  25.          italic          =   0   'False
  26.          strikethrough   =   0   'False
  27.       EndProperty
  28.       Height          =   555
  29.       Left            =   3480
  30.       TabIndex        =   2
  31.       Top             =   900
  32.       Width           =   1455
  33.    End
  34.    Begin VB.CommandButton cmdPrintReport 
  35.       Caption         =   "&Print Report"
  36.       Default         =   -1  'True
  37.       BeginProperty Font 
  38.          name            =   "MS Sans Serif"
  39.          charset         =   0
  40.          weight          =   700
  41.          size            =   8.25
  42.          underline       =   0   'False
  43.          italic          =   0   'False
  44.          strikethrough   =   0   'False
  45.       EndProperty
  46.       Height          =   555
  47.       Left            =   1140
  48.       TabIndex        =   1
  49.       Top             =   900
  50.       Width           =   1455
  51.    End
  52.    Begin VB.Label lblMessage 
  53.       Alignment       =   2  'Center
  54.       BackColor       =   &H00C0C0C0&
  55.       BeginProperty Font 
  56.          name            =   "MS Sans Serif"
  57.          charset         =   0
  58.          weight          =   700
  59.          size            =   9.75
  60.          underline       =   0   'False
  61.          italic          =   0   'False
  62.          strikethrough   =   0   'False
  63.       EndProperty
  64.       Height          =   435
  65.       Left            =   960
  66.       TabIndex        =   3
  67.       Top             =   240
  68.       Width           =   4155
  69.    End
  70.    Begin VB.Label lblDDE 
  71.       Height          =   255
  72.       Left            =   1860
  73.       TabIndex        =   0
  74.       Top             =   1680
  75.       Visible         =   0   'False
  76.       Width           =   2895
  77.       WordWrap        =   -1  'True
  78.    End
  79. End
  80. Attribute VB_Name = "Form1"
  81. Attribute VB_Creatable = False
  82. Attribute VB_Exposed = False
  83. Option Explicit
  84.  
  85. Const dbName = "D:\VB4\REPORTER.MDB"
  86.  
  87. Private OpenedDatabase As Boolean
  88. Private StartedAccess As Boolean
  89.  
  90. Private Sub Form_Load()
  91.     Dim dbName As String
  92.     
  93.     ' Set the error handler
  94.     On Error GoTo LoadError
  95.     
  96.     ' Get the database name.
  97.     dbName = DataPath() & "\CHAPTER.04\REPORTER.MDB" ' DataPath() is in READINI.BAS
  98.     
  99.     ' Show the form so that the user can see the messages diusplayed
  100.     ' during the Load event.
  101.     Me.Show
  102.     Me.Refresh
  103.     
  104.     ' Set the link topic to Microsoft Access. If you have Access version 1.1,
  105.     ' change MSACCESS to ACCESS.
  106.     lblDDE.LinkTopic = "MSACCESS|SYSTEM"
  107.     
  108.     ' Set error handling for the DDE initiate process, then try to establish
  109.     ' the link. If the link attempt fails, an error is generated.
  110.     On Error GoTo StartAccess
  111.     lblDDE.LinkMode = 2
  112.     
  113.     ' Reestablish the original error handler
  114.     On Error GoTo LoadError
  115.  
  116.     ' Get a list of "Topics" - open databases - from Access
  117.     lblDDE.LinkItem = "Topics"
  118.     lblDDE.LinkRequest
  119.     
  120.     If InStr(lblDDE, dbName) = 0 Then
  121.     
  122.         ' The REPORTER database is not open, so open it and set the
  123.         ' flag that indicates that this application has opened it.
  124.         lblMessage.Caption = "Opening Database"
  125.         lblDDE.LinkExecute "[OpenDatabase " & dbName & "]"
  126.         OpenedDatabase = True
  127.         lblMessage.Caption = "Database Opened"
  128.     Else
  129.         lblMessage.Caption = "Database is Open"
  130.     End If
  131.     
  132. Exit Sub
  133. StartAccess:
  134.     Dim dummy As Integer
  135.     Dim triedOnce As Boolean
  136.     Dim pathToAccess As String
  137.     
  138.     ' This error routine is called when the link attempt fails. The first
  139.     ' time it is called, triedOnce will be false, so it will attempt to
  140.     ' start Access.
  141.     If Not triedOnce Then
  142.         lblMessage.Caption = "Starting Microsoft Access"
  143.         Me.Refresh
  144.         
  145.         ' Get the path to the installation's copy of Microsoft Access.
  146.         pathToAccess = AccessPath()
  147.         
  148.         If pathToAccess <> "" Then
  149.         
  150.             ' WIN.INI has a path to Access, so try to start Access running.
  151.             ' Then set focus back to the current app.
  152.             dummy = Shell(pathToAccess)
  153.             Me.SetFocus
  154.             
  155.             ' Set the triedOnce variable to indicate that we've tried
  156.             ' to start Access.
  157.             triedOnce = True
  158.             
  159.             ' Set the StartedAccess flag to indicate that this app started
  160.             ' Access.
  161.             StartedAccess = True
  162.             lblMessage.Caption = "Access Started"
  163.             
  164.             ' Go back and try the link again.
  165.             Resume
  166.         Else
  167.         
  168.             ' No path to Access in WIN.INI (at least not where we've looked!)
  169.             MsgBox "Cannot find path to Microsoft Access", vbCritical
  170.         End If
  171.     Else
  172.     
  173.         ' We tried to start Access once, but the link still fails. Time
  174.         ' to inform the user and give up.
  175.         MsgBox "Cannot start " & pathToAccess, vbCritical
  176.     End If
  177. End
  178.  
  179. LoadError:
  180.     MsgBox Error$, vbCritical
  181. End
  182. End Sub
  183. Private Sub cmdPrintReport_Click()
  184.     On Error GoTo PrintError
  185.     
  186.     ' Set the timeout value to a long enough value to let the report
  187.     ' print. A long report would require a higher value.
  188.     lblDDE.LinkTimeout = 600        ' 60 seconds
  189.     lblMessage = "Printing Report"
  190.     Screen.MousePointer = 11
  191.     
  192.     ' Use DDE to execute the Publisher Labels Report macro in the
  193.     ' REPORTER.MDB database.
  194.     lblDDE.LinkExecute "[Publisher Labels Report]"
  195.     lblMessage = "Report Printed"
  196.     Screen.MousePointer = 0
  197.     
  198.     ' Return the focus back to the current application.
  199.     Me.SetFocus
  200.     
  201. Exit Sub
  202. PrintError:
  203.     Screen.MousePointer = 0
  204.     MsgBox Error$, vbExclamation
  205. Exit Sub
  206. End Sub
  207. Private Sub Form_Unload(Cancel As Integer)
  208.     
  209.     ' Ignore any errors; they will occur if someone has already closed the
  210.     ' database and/or Access, and that's okay.
  211.     On Error Resume Next
  212.     
  213.     Screen.MousePointer = 11
  214.     
  215.     If StartedAccess Then
  216.         
  217.         ' This app started access, so execute then Access Quit action,
  218.         ' which closes Access.
  219.         lblDDE.LinkExecute "[Quit]"
  220.         
  221.     ElseIf OpenedDatabase Then
  222.     
  223.         ' We didn't start Access, but we did open the database. So close it.
  224.         lblDDE.LinkExecute "[CloseDatabase]"
  225.         
  226.     End If
  227.     Screen.MousePointer = 0
  228.     
  229. End Sub
  230. Private Sub cmdClose_Click()
  231.     Unload Me
  232. End Sub
  233.  
  234.